package jwr.basic;

public class J15_Interface {

	public static void main(String[] args) {

//		J15SungJukService sjsrv;
//		sjsrv = new J15SungJukService();	
		// 인터페이스는 new 연산자를 통해 객체로 만들 수 없다.
		// 반드시 이것을 상속(구현)한 클래스를 
		// 통해 객체로 생성할 수 있음
		
		J15SungJukServiceImpl sjsrv = new J15SungJukServiceImpl();
		
		//성적 처리에 필요한 기능(총점, 평균, 학점)들을 인터페이스로 분리해서
		// 추상메서드로 정의하고 그것을 구현해서 클래스로 작성
		// J15SungJukService(인터페이스) -> J15SungJukServiceImpl(구현클래스)
		
		J15SungJukVO sj= new J15SungJukVO("우람", 100, 90, 80);
		
		//값을 저장하는 클래스 선언 및 초기화
		
		sj.setTot(sjsrv.getTotal(sj));
		sj.setAvg(sjsrv.getAverage(sj));
		sj.setGrd(sjsrv.getGrade(sj));
		
		// 총점, 평균, 학점 계산 후
		// 각 변수에 값 저장
		
		System.out.println(sj.toString());
		
		}
}
//인터페이스 (~service)
interface J15SungJukService{
	//인터페이스가 제공할 메서드 정의
	//메서드는 서명까지만 작성
	//이러한 메서드를 추상메서드라 함
	
	int aaa = 11;
//	int getTotal(int kor, int eng, int mat);
	int getTotal(J15SungJukVO sj);
//	double getAverage(int kor, int eng, int mat);
	double getAverage(J15SungJukVO sj);
//	char getGrade(int kor, int eng, int mat);
	char getGrade(J15SungJukVO sj);
}
//인터페이스를 구현한 클래스 작성 (~Impl)
class J15SungJukServiceImpl implements J15SungJukService{
	@Override
	public double getAverage(J15SungJukVO sj) {
//		double avg = (double)(sj.getKor()+sj.getEng()+sj.getMat())/3;
		double avg = getTotal(sj)/3;
		return avg;
	}
	@Override
	public char getGrade(J15SungJukVO sj) {
		char grd=' ';
		switch ((int)(getAverage(sj)/10))
		{
			case 10:
			case 9: { 
				grd='수'; 
				break;
			}
			case 8: {
				grd = '우'; 
				break;
			}
			case 7: { 
				grd = '미'; 
				break;
			}
			case 6: { 
				grd = '양'; 
				break;
			}
			default:{
				grd = '가';
			}
		}
		return grd;
	}
	@Override
	public int getTotal(J15SungJukVO sj) {
		return sj.getKor()+sj.getEng()+sj.getMat();
	}
}
class J15SungJukVO{
	private String name;
	private int kor;
	private int eng;
	private int mat;
	
	private int tot;
	private double avg;
	private char grd;
	public J15SungJukVO(String name, int kor, int eng, int mat) {
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getKor() {
		return kor;
	}
	public void setKor(int kor) {
		this.kor = kor;
	}
	public int getEng() {
		return eng;
	}
	public void setEng(int eng) {
		this.eng = eng;
	}
	public int getMat() {
		return mat;
	}
	public void setMat(int mat) {
		this.mat = mat;
	}
	public int getTot() {
		return tot;
	}
	public void setTot(int tot) {
		this.tot = kor+eng+mat;
	}
	public double getAvg() {
		return avg;
	}
	public void setAvg(double avg) {
		this.avg = tot/3;
	}
	public char getGrd() {
		return grd;
	}
	public void setGrd(char grd) {
		this.grd = grd;
	}
	@Override
	public String toString() {
		return "J15SungJukVO [name=" + name + ", kor=" + kor + ", eng=" + eng
				+ ", mat=" + mat + ", tot=" + tot + ", avg=" + avg + ", grd="
				+ grd + "]";
	}
	
	
}